package com.fingard.dsp.tcpserver;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;

/**支付提交和状态查询控制，支付提交线程未结束，不允许查询*/
public class PayQryController {

	/**支付提交开始处理时，记录流水号*/
	public void putPayReqID(String pReqID){
		int idx = getListIdx(pReqID);
		HashMap<String,Date> trgMap = listMapSeq.get(idx);
		synchronized(trgMap){
			trgMap.put(pReqID, new Date());
		}
	}
	
	/**支付提交处理完后，移除流水号*/
	public void removePayReqID(String pReqID){
		int idx = getListIdx(pReqID);
		HashMap<String,Date> trgMap = listMapSeq.get(idx);
		synchronized(trgMap){
			trgMap.remove(pReqID);
		}
	}
	
	/**状态查询时，判断流水号是否还未处理完，返回true表示已处理完（已不存在）*/
	public boolean checkNotExistsPayReqID(String pReqID){
		int idx = getListIdx(pReqID);
		HashMap<String,Date> trgMap = listMapSeq.get(idx);
		if(trgMap.containsKey(pReqID)){
			return false;//还存在，不能查询
		}else{
			return true;//不存在，已处理完
		}
	}
	
	/**将流水号最后6位按数字相加，再取余数，得到对应的map索引*/
	private int getListIdx(String pReqID){
		int sum = 0;
		int start=0;
		if(pReqID.length()>6){
			start = pReqID.length()-6;
		}
		for(int i=start;i<pReqID.length();i++){
			sum += pReqID.charAt(i);
		}
		return sum % maxItemCount;
	}
	
	private final int maxItemCount = 10;//10个map，为提高并发
	private ArrayList<HashMap<String,Date>> listMapSeq;
	public PayQryController(){
		listMapSeq = new ArrayList<HashMap<String,Date>>();
		for(int i=0; i<maxItemCount; i++){
			listMapSeq.add(new HashMap<String,Date>());
		}
	}
}
